From ab105de48f04c6b8b5bcc705b287dcafb12a119d Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Sun, 30 Apr 2006 09:47:51 +0100 Subject: [PATCH] Balloon driver: when in autotranslate mode, pages are returned to xen without traversing init_mm. This change is needed for xen/ia64 vp model. Signed-off-by: Isaku Yamahata --- .../drivers/xen/balloon/balloon.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c index f773f8edaa..1a7216c8bd 100644 --- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c +++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c @@ -550,9 +550,22 @@ struct page *balloon_alloc_empty_page_range(unsigned long nr_pages) scrub_pages(vstart, 1 << order); balloon_lock(flags); - ret = apply_to_page_range(&init_mm, vstart, - PAGE_SIZE << order, dealloc_pte_fn, NULL); - BUG_ON(ret); + if (xen_feature(XENFEAT_auto_translated_physmap)) { + unsigned long gmfn = __pa(vstart) >> PAGE_SHIFT; + struct xen_memory_reservation reservation = { + .nr_extents = 1, + .extent_order = order, + .domid = DOMID_SELF + }; + set_xen_guest_handle(reservation.extent_start, &gmfn); + ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, + &reservation); + BUG_ON(ret != 1); + } else { + ret = apply_to_page_range(&init_mm, vstart, PAGE_SIZE << order, + dealloc_pte_fn, NULL); + BUG_ON(ret); + } current_pages -= 1UL << order; totalram_pages = current_pages; balloon_unlock(flags); -- 2.30.2